package cn.com.push;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import cn.com.api.entity.PushDevice;
import javapns.devices.Device;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;

/**
 * ClassName: PushUtil
 * 
 * @Description: 推送工具类
 * @author yewl
 * @date 2017年4月28日
 */
public class PushUtil {
	protected static final Logger LOG = LogManager.getLogger(PushUtil.class.getName());

	public static void PushMessage(List<PushDevice> devices, String message) throws Exception {
		/************ ios推送的配置 ************/
		int iosbadge = 1;// 图标小红圈的数值
		String iossound = "default";// 铃音
		String certificatePath = "/Users/apple/Downloads/aps_certificate/ios_aps_development_bt.p12";// ios证书的地址密码
		String certificatePassword = "123456";// 此处注意导出的证书密码不能为空因为空密码会报错

		List<String> iostokens = new ArrayList<String>();// ios设备
		List<String> androidtokens = new ArrayList<String>();// android设备
		for (PushDevice pushDevice : devices) {
			if ("0".equals(pushDevice.getDevice_type())) {
				iostokens.add(pushDevice.getDevice_id());
			} else {
				androidtokens.add(pushDevice.getDevice_id());
			}
		}

		/************ ios推送——start ************/
		PushNotificationPayload payLoad = new PushNotificationPayload();
		payLoad.addAlert(message); // 消息内容
		payLoad.addBadge(iosbadge); // iphone应用图标上小红圈上的数值
		if (!StringUtils.isBlank(iossound)) {
			payLoad.addSound(iossound);// 铃音
		}
		PushNotificationManager pushManager = new PushNotificationManager();
		// true：表示的是产品发布推送服务 false：表示的是产品测试推送服务
		pushManager.initializeConnection(
				new AppleNotificationServerBasicImpl(certificatePath, certificatePassword, false));
		List<PushedNotification> notifications = new ArrayList<PushedNotification>();
		// 发送push消息
		List<Device> device = new ArrayList<Device>();
		for (String token : iostokens) {
			device.add(new BasicDevice(token));
		}
		notifications = pushManager.sendNotifications(payLoad, device);
		pushManager.stopConnection();
		/************ ios推送——end ************/

		/************ android推送——start ************/
		/************ android推送——end ************/
	}

	public static void main(String[] args) throws Exception {

		String deviceToken = "5b40a2368b46208484cb15e9cc132a74065bf3e3b8f7c304b64c06d0262e14b1";
		String alert = "给你发信息了";// push的内容
		int badge = 3;// 图标小红圈的数值
		String sound = "default";// 铃音

		List<String> tokens = new ArrayList<String>();
		tokens.add(deviceToken);
		// String certificatePath = "D:/ZshPush.p12";
		String certificatePath = "/Users/apple/Downloads/aps_certificate/ios_aps_development_bt.p12";
		String certificatePassword = "123456";// 此处注意导出的证书密码不能为空因为空密码会报错
		boolean sendCount = true;

		try {
			PushNotificationPayload payLoad = new PushNotificationPayload();
			payLoad.addAlert(alert); // 消息内容
			payLoad.addBadge(badge); // iphone应用图标上小红圈上的数值

			if (!StringUtils.isBlank(sound)) {
				payLoad.addSound(sound);// 铃音
			}
			PushNotificationManager pushManager = new PushNotificationManager();
			// true：表示的是产品发布推送服务 false：表示的是产品测试推送服务
			pushManager.initializeConnection(
					new AppleNotificationServerBasicImpl(certificatePath, certificatePassword, false));
			List<PushedNotification> notifications = new ArrayList<PushedNotification>();
			// 发送push消息
			if (sendCount) {
				Device device = new BasicDevice();
				device.setToken(tokens.get(0));
				PushedNotification notification = pushManager.sendNotification(device, payLoad, true);
				notifications.add(notification);
			} else {
				List<Device> device = new ArrayList<Device>();
				for (String token : tokens) {
					device.add(new BasicDevice(token));
				}
				notifications = pushManager.sendNotifications(payLoad, device);
			}
			pushManager.stopConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
